/**
 * 权限工具函数
 */

/**
 * 检查用户是否拥有指定权限
 * @param {Array} userPermissions - 用户权限列表
 * @param {string} permissionIdentifier - 权限标识符
 * @returns {boolean} - 是否拥有权限
 */
export const hasPermission = (userPermissions = [], permissionIdentifier) => {
  if (!permissionIdentifier || !userPermissions || userPermissions.length === 0) {
    return false;
  }
  
  return userPermissions.some(
    (permission) => permission.identifier === permissionIdentifier.path && permission.type === 'menu'
  );
};

/**
 * 过滤菜单，只保留用户有权限访问的菜单项
 * @param {Array} menus - 菜单列表
 * @param {Array} userPermissions - 用户权限列表
 * @returns {Array} - 过滤后的菜单列表
 */
export const filterMenusByPermissions = (menus = [], userPermissions = []) => {
  if (!menus || menus.length === 0) {
    return [];
  }
  
  return menus
    .filter((menu) => {
      // 如果菜单没有权限要求，则所有用户都可以访问
      if (!menu.permission) {
        return true;
      }
      
      // 检查用户是否有权限访问该菜单
      return hasPermission(userPermissions, menu.permission);
    })
    .map((menu) => {
      // 递归处理子菜单
      if (menu.children && menu.children.length > 0) {
        return {
          ...menu,
          children: filterMenusByPermissions(menu.children, userPermissions),
        };
      }
      return menu;
    });
};

/**
 * 获取用户可访问的第一个菜单项，用于默认重定向
 * @param {Array} menus - 菜单列表
 * @param {Array} userPermissions - 用户权限列表
 * @returns {string} - 第一个可访问菜单的路径
 */
export const getFirstAccessibleMenuPath = (menus = [], userPermissions = []) => {
  const accessibleMenus = filterMenusByPermissions(menus, userPermissions);
  
  if (accessibleMenus.length === 0) {
    return '/welcome';
  }
  
  const firstMenu = accessibleMenus[0];
  
  // 如果第一个菜单有子菜单，则返回第一个子菜单的路径
  if (firstMenu.children && firstMenu.children.length > 0) {
    return firstMenu.children[0].path;
  }
  
  return firstMenu.path;
};